package edu.upc.dao.consulta.impl;

import java.math.BigDecimal;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import javax.sql.DataSource;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import edu.upc.dao.consulta.ConsultaOfertaLaboralDestacadaDao;
import edu.upc.model.Aviso;
import edu.upc.model.Especialidad;
import edu.upc.model.OfertaLaboralDestacada;

@Component
public class ConsultaOfertaLaboralDestacadaDaoImpl implements	ConsultaOfertaLaboralDestacadaDao {
	
	@Autowired
	DataSource dataSource;
	

	public List<Aviso> obtenerOfertaLaboralDestacada(Integer numero) {
		String sql = "select a.id_avi, a.cargo_avi, a.cargo_avi, a.inicio_avi, a.fin_avi, a.descripcion_avi, a.jornadaLaboral_avi, a.disponibilidad_avi, a.requerimientos_avi, a.beneficios_avi, a.sueldo_avi, a.conteoLectura_avi, a.id_Especialidad   ,(SELECT e.nombre_espe FROM tb_especialidad e WHERE e.id_Especialidad = a.id_Especialidad ) AS DSCRP from tb_aviso a where a.conteoLectura_avi > ?";

		Connection conn = null;
		PreparedStatement ps = null;
		ResultSet rs = null;
		List<Aviso> lst = new ArrayList<Aviso>();
		try {
			conn = dataSource.getConnection();
			ps = conn.prepareStatement(sql);
			ps.setLong(1, numero);	
			rs = ps.executeQuery();
			lst = mapOfertaLaboralDestacada(rs);
		} catch (SQLException e) {
			throw new RuntimeException("SQL exception occurred finding by merchant number", e);
		} finally {
			if (rs != null) {
				try {
					// Close to prevent database cursor exhaustion
					rs.close();
				} catch (SQLException ex) {
				}
			}
			if (ps != null) {
				try {
					// Close to prevent database cursor exhaustion
					ps.close();
				} catch (SQLException ex) {
				}
			}
			if (conn != null) {
				try {
					// Close to prevent database connection exhaustion
					conn.close();
				} catch (SQLException ex) {
				}
			}
		}
		return lst;
	}

	private List<Aviso> mapOfertaLaboralDestacada(ResultSet rs) throws SQLException {
		List<Aviso> lstOfertaLaboral = new ArrayList<Aviso>();
		while(rs.next()){
			Aviso aviso=new Aviso();
			aviso.setId(Integer.parseInt(rs.getString("id_avi")));
			aviso.setCargo(rs.getString("cargo_avi"));
			aviso.setFechaInicio(rs.getDate("inicio_avi"));
			aviso.setFechaFin(rs.getDate("fin_avi"));
			aviso.setDescripcion(rs.getString("descripcion_avi"));
			aviso.setJornadaLaboral(rs.getString("jornadaLaboral_avi"));
			aviso.setDisponibilidad(rs.getString("disponibilidad_avi"));
			aviso.setRequerimiento(rs.getString("requerimientos_avi"));
			aviso.setBeneficios(rs.getString("beneficios_avi"));
			aviso.setSueldo(new BigDecimal(rs.getString("sueldo_avi")));
			//aviso.setEstado(rs.getString("estado_avi"));
			aviso.setContadorVisitas(rs.getInt("conteoLectura_avi"));
			
			Especialidad especialidad = new Especialidad();
			especialidad.setIdEspecialidad(rs.getInt("id_Especialidad"));
			especialidad.setNombreEspecialidad(rs.getString("DSCRP"));
			aviso.setEspecialidad(especialidad);
			lstOfertaLaboral.add(aviso);
		}

		return lstOfertaLaboral;
	}

}
